package lp2.projeto.agenda;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

import javax.media.*;
import javax.swing.*;

import lp2.projeto.database.Database;

public class SomJPanel extends JPanel {
	private static final long serialVersionUID = -7135169635573449485L;

	private Som som;
	
	private JButton pararJButton;
	private JButton pausarJButton;
	private JButton continuarJButton;
	
	private Player tocador;
	
	/**
	 * Construtor de SomJPanel
	 */
	public SomJPanel() {
		setLayout(new GridLayout());
		                            
		pararJButton = new JButton("Parar");
		pararJButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				parar();
			}
		});
		add(pararJButton);
		
		pausarJButton = new JButton("Pausar");
		pausarJButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				pausar();
			}
		});
		add(pausarJButton);
		
		continuarJButton = new JButton("Continuar");
		continuarJButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				continuar();
			}
		});
		add(continuarJButton);
		
		setSom(null);
	}
	
	private void parar() {
		tocador.setMediaTime(new Time(0));
		tocador.stop();
		
		pararJButton.setEnabled(false);
		pausarJButton.setEnabled(false);
		continuarJButton.setEnabled(true);		
	}
	
	private void pausar() {
		tocador.stop();
		pararJButton.setEnabled(true);
		pausarJButton.setEnabled(false);
		continuarJButton.setEnabled(true);
	}
	
	private void continuar() {
		tocador.start();
		pararJButton.setEnabled(true);
		pausarJButton.setEnabled(true);
		continuarJButton.setEnabled(false);
	}
	
	private void criaTocador() throws IOException, NoPlayerException {
		final String arquivo_temporario = "temporario" + Database.getExtensao(som.getNome());
		 
		OutputStream os = new BufferedOutputStream(new FileOutputStream(new File(arquivo_temporario)));
		os.write(som.getConteudo());
		os.close();
		
		try {
			tocador = Manager.createPlayer(new File(arquivo_temporario).toURI().toURL());
		} catch (MalformedURLException e) {
			throw new RuntimeException("Erro interno");
		}
	}
	
	/**
	 * Seta o som que o Panel representa
	 * @param som o som
	 */
	public void setSom(Som som) {
		this.som = som;
		
		if (som != null) {
			try {
				criaTocador();
			} catch (IOException e) {
				avisoJDialog aviso = new avisoJDialog("Falha ao criar arquivo temporario");
				aviso.setVisible(true);
				this.som = som = null;
			} catch (NoPlayerException e) {
				avisoJDialog aviso = new avisoJDialog("Formato de arquivo nao suportado");
				aviso.setVisible(true);
				this.som = som = null;
			}
		}
		
		if (som == null) {
			pararJButton.setEnabled(false);
			continuarJButton.setEnabled(false);
			pausarJButton.setEnabled(false);
		} else {
			pararJButton.setEnabled(false);
			pausarJButton.setEnabled(false);
			continuarJButton.setEnabled(true);
		}
	}
	
	/**
	 * Retorna o som que o Panel representa
	 * @return o som
	 */
	public Som getSom() {
		return som;
	}
}
